Processing video data may be a computationally complex task due to the high data rates involved. For example, television quality video may require up to 27 Mega Bytes per second. Such data sizes and rates may stress networks and make real-time processing of video data cumbersome. Accordingly, video data is often stored in a compressed format.
Motion vectors are often used for motion estimation in video compression to describe transformation from one two-dimensional (2-D) image to another 2-D image. Motion vectors may be used to represent transformation of a whole image (e.g., in a global motion estimation problem), specific parts of the image (e.g., blocks, or patches), or individual pixels of the image.
Motion estimation is a highly ill-posed problem since the frames (images) are obtained from projection of a three-dimensional (3-D) medium onto a 2-D plane. This renders the problem of searching for and determining the motion vector complex and computationally intensive. Available schemes for finding motion vectors often approach this problem by initializing a search at a location, such as the (0,0) location of a macroblock, and searching for the motion vector in the entire macroblock, thereby consuming a significant amount of power and central processing resources.